package com.huashi.dealer.modular.business.goods.bo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.Min;

/**
 * 商品列表查询入参
 *
 * @author 谭陈强
 * @since 2025-08-07
 */
@Data
@Schema(description = "商品列表查询入参")
public class GoodsListBo {

    /**
     * 商品状态
     * 10-上架，20-下架
     */
    @Schema(description = "商品状态：10上架，20下架", example = "10")
    private Integer status = 10;

    /**
     * 是否新品
     * 10-是，20-否
     */
    @Schema(description = "是否新品：10是，20否", example = "0")
    private Integer isNewProduct;

    /**
     * 是否爆款
     * 10-是，20-否
     */
    @Schema(description = "是否爆款：10是，20否", example = "0")
    private Integer isHotSellingItem;

    /**
     * 分类ID
     */
    @Schema(description = "分类ID", example = "0")
    private Long categoryId;

    /**
     * 搜索关键词
     */
    @Schema(description = "搜索关键词", example = "")
    private String search;

    /**
     * 排序类型
     * all-综合排序，sales-销量排序，price-价格排序
     */
    @Schema(description = "排序类型：all综合排序，sales销量排序，price价格排序", example = "all")
    private String sortType = "all";

    /**
     * 价格排序方向
     * true-降序，false-升序
     */
    @Schema(description = "价格排序方向：true降序，false升序", example = "false")
    private Boolean sortPrice = false;

    /**
     * 每页数量
     */
    @Schema(description = "每页数量", example = "20")
    @Min(value = 1, message = "每页数量不能小于1")
    private Integer listRows = 10;

    /**
     * 商品类型
     * 10-商品，20-赠品
     */
    @Schema(description = "商品类型：10商品，20赠品", example = "10")
    private Integer isType = 10;

    /**
     * 当前页码
     */
    @Schema(description = "当前页码", example = "1")
    @Min(value = 1, message = "页码不能小于1")
    private Integer page = 1;

    /**
     * 用户ID（用于经销商商品过滤）
     */
    @Schema(description = "用户ID", example = "1")
    private Long userId;

    /**
     * 用户商品ID列表（经销商指定商品）
     */
    @Schema(description = "用户商品ID列表", example = "1,2,3")
    private String goodsIds;

    // ========== 业务方法 ==========

    /**
     * 获取排序类型文本
     */
    public String getSortTypeText() {
        if (sortType == null) {
            return "";
        }
        switch (sortType) {
            case "all":
                return "综合排序";
            case "sales":
                return "销量排序";
            case "price":
                return "价格排序";
            default:
                return "";
        }
    }

    /**
     * 获取商品状态文本
     */
    public String getStatusText() {
        if (status == null) {
            return "";
        }
        switch (status) {
            case 10:
                return "上架";
            case 20:
                return "下架";
            default:
                return "";
        }
    }

    /**
     * 获取商品类型文本
     */
    public String getIsTypeText() {
        if (isType == null) {
            return "";
        }
        switch (isType) {
            case 10:
                return "商品";
            case 20:
                return "赠品";
            default:
                return "";
        }
    }

    /**
     * 判断是否新品
     */
    public boolean isNewProduct() {
        return isNewProduct != null && isNewProduct == 10;
    }

    /**
     * 判断是否爆款
     */
    public boolean isHotSelling() {
        return isHotSellingItem != null && isHotSellingItem == 10;
    }

    /**
     * 判断是否上架
     */
    public boolean isOnSale() {
        return status != null && status == 10;
    }

    /**
     * 获取偏移量（用于分页）
     */
    public int getOffset() {
        return (page - 1) * listRows;
    }

    /**
     * 获取用户商品ID数组
     */
    public Long[] getUserGoodsIdArray() {
        if (goodsIds == null || goodsIds.trim().isEmpty()) {
            return new Long[0];
        }
        String[] ids = goodsIds.split(",");
        Long[] result = new Long[ids.length];
        for (int i = 0; i < ids.length; i++) {
            try {
                result[i] = Long.parseLong(ids[i].trim());
            } catch (NumberFormatException e) {
                result[i] = 0L;
            }
        }
        return result;
    }
}
